package juego;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import niveles.Escenario;
import ar.uba.fi.algo3.titiritero.ObjetoVivo;
import ar.uba.fi.algo3.titiritero.Posicionable;
import basicas.Posicion;

public abstract class ObjetoDelJuego implements Posicionable, ObjetoVivo {
	private Posicion posicion;
	protected Escenario nivel;
	private int id;
	
	public ObjetoDelJuego(Posicion posicionInicial) {
		if (posicionInicial != null) this.posicion = posicionInicial.Copiar();		
		id = this.hashCode();
	}
	
	public ObjetoDelJuego(Node n) {
		int x, y;
		x = (int) Float.parseFloat(n.getChildNodes().item(1).getChildNodes().item(1).getTextContent());
		y = (int) Float.parseFloat(n.getChildNodes().item(1).getChildNodes().item(3).getTextContent());
		setPosicion(new Posicion(x, y));
		id = this.hashCode();
	}

	public void setNivel(Escenario nivel) {
		this.nivel = nivel;
	}
	
	public Escenario getNivel() {
		return nivel;
	}
	
	public Posicion getPosicion() {
		return posicion;
	}
	
	public void setPosicion(Posicion posicion) {
		this.posicion = posicion;
	}
	
	public double getX() {
		return posicion.getX();
	}
	
	public double getY() {
		return posicion.getY();
	}
	
	public void morir() {
		nivel.removerObjeto(this);		
	}
	
	public int getId() {
		return id;
	}
	
	public void informarPosicion() {		
		if (getNivel() != null) getNivel().ocuparPosicion(this);		
	}
	
	public Element getElemento(Document doc) {		
		Element nuevoNodo;
		Element nodoHijo;
		
		nuevoNodo = doc.createElement(this.getClass().getName());		
		
		nodoHijo = posicion.getElemento(doc, "posicion");
		nuevoNodo.appendChild(nodoHijo);
		
		return nuevoNodo;
	}

}
